<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/Python-3.6.2/Include/sliceobject.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/Python-3.6.2/Include/sliceobject.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="macros_noref.html#_UHlfU0xJQ0VPQkpFQ1RfSF8w"><span class="b">Py_SLICEOBJECT_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlfU0xJQ0VPQkpFQ1RfSF8w"><span class="b">Py_SLICEOBJECT_H</span></a>
<a name="3" /><span class="False">       3:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="4" /><span class="False">       4:</span> <span class="m">extern</span> <span class="e">&quot;C&quot;</span> <span class="f">{</span>
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">endif</span>
<a name="6" /><span class="True">       6:</span> 
<a name="7" /><span class="True">       7:</span> <span class="k">/* The unique ellipsis object &quot;...&quot; */</span>
<a name="8" /><span class="True">       8:</span> 
<a name="9" /><span class="True">       9:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyObject</span><span class="f">)</span> <span class="b">_Py_EllipsisObject</span><span class="f">;</span> <span class="k">/* Don&apos;t use this directly */</span>
<a name="10" /><span class="True">      10:</span> 
<a name="11" /><span class="True">      11:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlfRWxsaXBzaXNfMA__"><span class="b">Py_Ellipsis</span></a> <span class="f">(</span><span class="f">&amp;</span><span class="b">_Py_EllipsisObject</span><span class="f">)</span>
<a name="12" /><span class="True">      12:</span> 
<a name="13" /><span class="True">      13:</span> <span class="k">/* Slice object interface */</span>
<a name="14" /><span class="True">      14:</span> 
<a name="15" /><span class="True">      15:</span> <span class="k">/*</span>
<a name="16" /><span class="True">      16:</span> <span class="k"></span>
<a name="17" /><span class="True">      17:</span> <span class="k">A slice object containing start, stop, and step data members (the</span>
<a name="18" /><span class="True">      18:</span> <span class="k">names are from range).  After much talk with Guido, it was decided to</span>
<a name="19" /><span class="True">      19:</span> <span class="k">let these be any arbitrary python type.  Py_None stands for omitted values.</span>
<a name="20" /><span class="True">      20:</span> <span class="k">*/</span>
<a name="21" /><span class="True">      21:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="22" /><span class="True">      22:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="f">{</span>
<a name="23" /><span class="True">      23:</span>     <a href="macros_ref.html#_UHlPYmplY3RfSEVBRF8w"><span class="b">PyObject_HEAD</span></a>
<a name="24" /><span class="True">      24:</span>     <span class="b">PyObject</span> <span class="f">*</span><span class="b">start</span><span class="f">,</span> <span class="f">*</span><span class="b">stop</span><span class="f">,</span> <span class="f">*</span><span class="b">step</span><span class="f">;</span>    <span class="k">/* not NULL */</span>
<a name="25" /><span class="True">      25:</span> <span class="f">}</span> <span class="b">PySliceObject</span><span class="f">;</span>
<a name="26" /><span class="True">      26:</span> <span class="f">#</span><span class="n">endif</span>
<a name="27" /><span class="True">      27:</span> 
<a name="28" /><span class="True">      28:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PySlice_Type</span><span class="f">;</span>
<a name="29" /><span class="True">      29:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="b">PyTypeObject</span><span class="f">)</span> <span class="b">PyEllipsis_Type</span><span class="f">;</span>
<a name="30" /><span class="True">      30:</span> 
<a name="31" /><span class="True">      31:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlTbGljZV9DaGVja18w"><span class="b">PySlice_Check</span></a><span class="f">(</span><span class="b">op</span><span class="f">)</span> <span class="f">(</span><a href="macros_ref.html#_UHlfVFlQRV8w"><span class="b">Py_TYPE</span></a><span class="f">(</span><span class="b">op</span><span class="f">)</span> <span class="f">==</span> <span class="f">&amp;</span><span class="b">PySlice_Type</span><span class="f">)</span>
<a name="32" /><span class="True">      32:</span> 
<a name="33" /><span class="True">      33:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PySlice_New</span><span class="f">(</span><span class="b">PyObject</span><span class="f">*</span> <span class="b">start</span><span class="f">,</span> <span class="b">PyObject</span><span class="f">*</span> <span class="b">stop</span><span class="f">,</span>
<a name="34" /><span class="True">      34:</span>                                   <span class="b">PyObject</span><span class="f">*</span> <span class="b">step</span><span class="f">)</span><span class="f">;</span>
<a name="35" /><span class="True">      35:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="36" /><span class="True">      36:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PySlice_FromIndices</span><span class="f">(</span><span class="b">Py_ssize_t</span> <span class="b">start</span><span class="f">,</span> <span class="b">Py_ssize_t</span> <span class="b">stop</span><span class="f">)</span><span class="f">;</span>
<a name="37" /><span class="True">      37:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PySlice_GetLongIndices</span><span class="f">(</span><span class="b">PySliceObject</span> <span class="f">*</span><span class="b">self</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">length</span><span class="f">,</span>
<a name="38" /><span class="True">      38:</span>                                  <span class="b">PyObject</span> <span class="f">*</span><span class="f">*</span><span class="b">start_ptr</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="f">*</span><span class="b">stop_ptr</span><span class="f">,</span>
<a name="39" /><span class="True">      39:</span>                                  <span class="b">PyObject</span> <span class="f">*</span><span class="f">*</span><span class="b">step_ptr</span><span class="f">)</span><span class="f">;</span>
<a name="40" /><span class="True">      40:</span> <span class="f">#</span><span class="n">endif</span>
<a name="41" /><span class="True">      41:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PySlice_GetIndices</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">r</span><span class="f">,</span> <span class="b">Py_ssize_t</span> <span class="b">length</span><span class="f">,</span>
<a name="42" /><span class="True">      42:</span>                                   <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">start</span><span class="f">,</span> <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">stop</span><span class="f">,</span> <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">step</span><span class="f">)</span><span class="f">;</span>
<a name="43" /><span class="True">      43:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PySlice_GetIndicesEx</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">r</span><span class="f">,</span> <span class="b">Py_ssize_t</span> <span class="b">length</span><span class="f">,</span>
<a name="44" /><span class="True">      44:</span>                                      <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">start</span><span class="f">,</span> <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">stop</span><span class="f">,</span>
<a name="45" /><span class="True">      45:</span>                                      <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">step</span><span class="f">,</span> <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">slicelength</span><span class="f">)</span><span class="f">;</span>
<a name="46" /><span class="True">      46:</span> 
<a name="47" /><span class="True">      47:</span> <span class="f">#</span><span class="n">if</span> <span class="f">!</span><span class="b">defined</span><span class="f">(</span><span class="b">Py_LIMITED_API</span><span class="f">)</span> <span class="f">||</span> <span class="f">(</span><span class="b">Py_LIMITED_API</span><span class="f">+</span><span class="c">0</span> <span class="f">&gt;=</span> <span class="c">0x03050400</span> <span class="f">&amp;&amp;</span> <span class="b">Py_LIMITED_API</span><span class="f">+</span><span class="c">0</span> <span class="f">&lt;</span> <span class="c">0x03060000</span><span class="f">)</span> <span class="f">||</span> <span class="b">Py_LIMITED_API</span><span class="f">+</span><span class="c">0</span> <span class="f">&gt;=</span> <span class="c">0x03060100</span>
<a name="48" /><span class="False">      48:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">Py_LIMITED_API</span>
<a name="49" /><span class="False">      49:</span> <span class="f">#</span><span class="n">define</span> <span class="b">PySlice_GetIndicesEx</span><span class="f">(</span><span class="b">slice</span><span class="f">,</span> <span class="b">length</span><span class="f">,</span> <span class="b">start</span><span class="f">,</span> <span class="b">stop</span><span class="f">,</span> <span class="b">step</span><span class="f">,</span> <span class="b">slicelen</span><span class="f">)</span> <span class="f">(</span>  \
<a name="50" /><span class="False">      50:</span>     <span class="b">PySlice_Unpack</span><span class="f">(</span><span class="f">(</span><span class="b">slice</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">start</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">stop</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">step</span><span class="f">)</span><span class="f">)</span> <span class="f">&lt;</span> <span class="c">0</span> <span class="f">?</span>                  \
<a name="51" /><span class="False">      51:</span>     <span class="f">(</span><span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="b">slicelen</span><span class="f">)</span> <span class="f">=</span> <span class="c">0</span><span class="f">)</span><span class="f">,</span> <span class="f">-</span><span class="c">1</span><span class="f">)</span> <span class="f">:</span>                                               \
<a name="52" /><span class="False">      52:</span>     <span class="f">(</span><span class="f">(</span><span class="f">*</span><span class="f">(</span><span class="b">slicelen</span><span class="f">)</span> <span class="f">=</span> <span class="b">PySlice_AdjustIndices</span><span class="f">(</span><span class="f">(</span><span class="b">length</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">start</span><span class="f">)</span><span class="f">,</span> <span class="f">(</span><span class="b">stop</span><span class="f">)</span><span class="f">,</span> <span class="f">*</span><span class="f">(</span><span class="b">step</span><span class="f">)</span><span class="f">)</span><span class="f">)</span><span class="f">,</span> \
<a name="53" /><span class="False">      53:</span>      <span class="c">0</span><span class="f">)</span><span class="f">)</span>
<a name="54" /><span class="True">      54:</span> <span class="f">#</span><span class="n">endif</span>
<a name="55" /><span class="True">      55:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PySlice_Unpack</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">slice</span><span class="f">,</span>
<a name="56" /><span class="True">      56:</span>                                <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">start</span><span class="f">,</span> <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">stop</span><span class="f">,</span> <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">step</span><span class="f">)</span><span class="f">;</span>
<a name="57" /><span class="True">      57:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">Py_ssize_t</span><span class="f">)</span> <span class="b">PySlice_AdjustIndices</span><span class="f">(</span><span class="b">Py_ssize_t</span> <span class="b">length</span><span class="f">,</span>
<a name="58" /><span class="True">      58:</span>                                              <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">start</span><span class="f">,</span> <span class="b">Py_ssize_t</span> <span class="f">*</span><span class="b">stop</span><span class="f">,</span>
<a name="59" /><span class="True">      59:</span>                                              <span class="b">Py_ssize_t</span> <span class="b">step</span><span class="f">)</span><span class="f">;</span>
<a name="60" /><span class="True">      60:</span> <span class="f">#</span><span class="n">endif</span>
<a name="61" /><span class="True">      61:</span> 
<a name="62" /><span class="False">      62:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="63" /><span class="False">      63:</span> <span class="f">}</span>
<a name="64" /><span class="True">      64:</span> <span class="f">#</span><span class="n">endif</span>
<a name="65" /><span class="True">      65:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !Py_SLICEOBJECT_H */</span>
<a name="66" /><span class="True">      66:</span> </pre>
  </body>
</html>
